home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Games / WHDLoad / Src / memory-speed / speed.asm < prev    next >
Encoding:
Assembly Source File  |  2001-03-12  |  11.2 KB  |  610 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    speed.asm
  3. ;  :Contents.    Slave to benchmark the memory speed under different cpu/mmu
  4. ;        setups, upper half of the screen shows performance with test
  5. ;        code located in Chip memory, lower half code in ExpMem (Fast)
  6. ;  :Author.    Wepl
  7. ;  :Version.    $Id: speed.asm 1.5 2001/03/11 23:09:01 jah Exp jah $
  8. ;  :History.    xx.xx.xx started
  9. ;        12.12.00 cleanup for public release
  10. ;        20.02.01 slave is also cacheable, more clear results with NoMMU
  11. ;  :Requires.    -
  12. ;  :Copyright.    Public Domain
  13. ;  :Language.    68000 Assembler
  14. ;  :Translator.    Devpac 3.14, Barfly 2.9
  15. ;  :To Do.
  16. ;---------------------------------------------------------------------------*
  17.  
  18.     INCDIR    Includes:
  19.     INCLUDE    whdload.i
  20.     INCLUDE    whdmacros.i
  21.  
  22.  BITDEF AF,68060,7
  23.  
  24.     OUTPUT    "wart:.debug/speed.slave"
  25.  
  26.     BOPT    O+            ;enable optimizing
  27.     BOPT    OG+            ;enable optimizing
  28.     BOPT    w4-            ;disable 64k warnings
  29.     BOPT    wo-            ;disable optimize warnings
  30.     SUPER
  31.     MC68060
  32.  
  33. ;======================================================================
  34.  
  35. _base        SLAVE_HEADER            ;ws_Security + ws_ID
  36.         dc.w    10
  37.         dc.w    WHDLF_NoError        ;ws_flags
  38.         dc.l    $40000            ;ws_BaseMemSize
  39.         dc.l    0            ;ws_ExecInstall
  40.         dc.w    _start-_base        ;ws_GameLoader
  41.         dc.w    0            ;ws_CurrentDir
  42.         dc.w    0            ;ws_DontCache
  43.         dc.b    0            ;ws_keydebug = F9
  44.         dc.b    $59            ;ws_keyexit = F10
  45. EXPMEMLEN = $3000
  46. _expmem        dc.l    EXPMEMLEN        ;ws_ExpMem
  47.         dc.w    _name-_base        ;ws_name
  48.         dc.w    _copy-_base        ;ws_copy
  49.         dc.w    _info-_base        ;ws_info
  50.  
  51. _name        dc.b    "Memory Speed Benchmark Slave",0
  52. _copy        dc.b    "2000 Wepl",0
  53. _info        dc.b    "done by Wepl "
  54.     DOSCMD    "WDate  >T:date"
  55.     INCBIN    "T:date"
  56.         dc.b    0
  57.     EVEN
  58.  
  59. ;======================================================================
  60. _start    ;    A0 = resident loader
  61. ;======================================================================
  62.  
  63.         lea    (_ciaa),a4        ;A4 = ciaa
  64.         move.l    a0,a5            ;A5 = resload
  65.         lea    (_custom),a6        ;A6 = custom
  66.         move.l    (_expmem),a7
  67.         add.l    #EXPMEMLEN-$200,a7    ;because hrtmon
  68.         lea    (_ssp),a0
  69.         move.l    a7,(a0)
  70.  
  71. SCREENWIDTH    = 320
  72. SCREENHEIGHT    = 279
  73. CHARHEIGHT    = 5
  74. CHARWIDTH    = 5
  75.  
  76. MEMRCHIP    = $4000
  77. MEMCOPPER    = $e000
  78. MEMCHIP        = $f000
  79. MEMSCREEN    = $10000
  80.  
  81. nc=WCPUF_Slave_NCS|WCPUF_Base_NCS|WCPUF_Exp_NCS
  82. ic=WCPUF_Slave_WT|WCPUF_Base_WT|WCPUF_Exp_WT|WCPUF_IC
  83. bc=ic|WCPUF_BC|WCPUF_SS
  84. wt=bc|WCPUF_DC
  85. cb=WCPUF_Slave_CB|WCPUF_Base_CB|WCPUF_Exp_CB|WCPUF_IC|WCPUF_DC|WCPUF_BC|WCPUF_SS
  86. sb=cb|WCPUF_SB|WCPUF_NWA
  87.  
  88. setcpu    MACRO
  89.         movem.l    d0-d1/a0-a1,-(a7)
  90.         move.l    #\1,d0
  91.         move.l    #WCPUF_All,d1
  92.         jsr    (resload_SetCPU,a5)
  93.         movem.l    (a7)+,d0-d1/a0-a1
  94.     ENDM
  95. catcpu    MACRO
  96.         addq    #2,d0
  97.         lea    \2,a0
  98.         bsr    _ps
  99.         sub.w    #CHARWIDTH*8,d0
  100.         addq.w    #CHARHEIGHT+1,d1
  101.         setcpu    \1
  102.         movem.l    d0-d1/a0-a1,-(a7)
  103.         moveq    #0,d0
  104.         moveq    #0,d1
  105.         jsr    (resload_SetCPU,a5)
  106.         move.l    d0,d2
  107.         movem.l    (a7)+,d0-d1/a0-a1
  108.         bsr    _pi
  109.         move.w    _attn+2,d7
  110.         btst    #AFB_68020,d7
  111.         beq    .q\@
  112.         movec    cacr,d2
  113.         sub.w    #CHARWIDTH*8,d0
  114.         addq.w    #CHARHEIGHT+1,d1
  115.         bsr    _pi
  116.         sub.w    #CHARHEIGHT+1,d1
  117.         btst    #AFB_68060,d7
  118.         beq    .q\@
  119.         movec    pcr,d2
  120.         sub.w    #CHARWIDTH*8,d0
  121.         add.w    #(CHARHEIGHT+1)*2,d1
  122.         bsr    _pi
  123.         sub.w    #(CHARHEIGHT+1)*2,d1
  124. .q\@        sub.w    #CHARHEIGHT+1,d1
  125.     ENDM
  126.  
  127.     ;clear screen
  128.         lea    (MEMSCREEN),a0
  129.         move.w    #SCREENHEIGHT*SCREENWIDTH/8/4-1,d0
  130. .cl        clr.l    (a0)+
  131.         dbf    d0,.cl
  132.     ;init gfx
  133.         lea    (_copper),a0
  134.         lea    (MEMCOPPER),a1
  135.         move.l    a1,(cop1lc,a6)
  136. .n        move.l    (a0)+,(a1)+
  137.         bpl    .n
  138.         waitvb a6
  139.         move.w    #DMAF_SETCLR|DMAF_MASTER|DMAF_COPPER|DMAF_RASTER,(dmacon,a6)
  140.     ;init timers
  141.         lea    (_tags),a0
  142.         jsr    (resload_Control,a5)
  143.         move.l    (_freq),d0
  144.         divu    #11,d0
  145.         move.b    d0,(ciatalo,a4)
  146.         lsr.w    #8,d0
  147.         move.b    d0,(ciatahi,a4)
  148.         move.b    #CIACRAF_RUNMODE,(ciacra,a4)
  149.         bset    #CIACRAB_LOAD,(ciacra,a4)
  150.         move.b    #$7f,(ciaicr,a4)
  151.         move.b    #CIAICRF_SETCLR|CIAICRF_TA,(ciaicr,a4)
  152.         move.w    #INTF_SETCLR|INTF_INTEN|INTF_PORTS,(intena,a6)
  153.         tst.b    (ciaicr,a4)
  154.         move.w    #INTF_PORTS,(intreq,a6)
  155.     ;copy code to chip
  156.         lea    _rchip,a0
  157.         lea    _stuffend,a1
  158.         lea    MEMRCHIP,a2
  159. .cp        move.l    (a0)+,(a2)+
  160.         cmp.l    a0,a1
  161.         bhi    .cp
  162.     ;copy code to fast
  163.         lea    _rfast,a0
  164.         lea    _stuffend,a1
  165.         move.l    (_expmem),a2
  166.         add.l    #16,a2
  167. .cp2        move.l    (a0)+,(a2)+
  168.         cmp.l    a0,a1
  169.         bhi    .cp2
  170.     ;set expmem/slave
  171.         lea    (_var),a2            ;A2 = slave
  172.         move.l    (_expmem),a3            ;A3 = expmem
  173.  
  174.     ;print screen text
  175.         moveq    #0,d0
  176.         move.l    #SCREENHEIGHT-CHARHEIGHT,d1
  177.         lea    _quit,a0
  178.         bsr    _ps
  179.  
  180.         moveq    #0,d0
  181.         moveq    #0,d1
  182.         lea    _top,a0
  183.         bsr    _ps
  184.  
  185.         moveq    #0,d0
  186.         addq.l    #6,d1
  187.         lea    _top2,a0
  188.         bsr    _ps
  189.         move.l    _attn,d2
  190.         bsr    _pi1
  191.         lea    _top3,a0
  192.         bsr    _ps
  193.         move.l    _freq,d2
  194.         bsr    _pi1
  195.         lea    _top5,a0
  196.         bsr    _ps
  197.         move.l    _ver,d2
  198.         bsr    _pi1
  199.         lea    _dot,a0
  200.         bsr    _ps
  201.         move.l    _rev,d2
  202.         bsr    _pi1
  203.         lea    _dot,a0
  204.         bsr    _ps
  205.         move.l    _build,d2
  206.         bsr    _pi1
  207.  
  208.         moveq    #0,d0
  209.         add.l    #CHARHEIGHT+1,d1
  210.         lea    _chip,a0
  211.         bsr    _ps
  212.         lea    _equ,a0
  213.         bsr    _ps
  214.         move.l    #MEMCHIP,d2
  215.         bsr    _pi1
  216.         add.l    #2*CHARWIDTH,d0
  217.         lea    _exp,a0
  218.         bsr    _ps
  219.         lea    _equ,a0
  220.         bsr    _ps
  221.         move.l    a3,d2
  222.         bsr    _pi1
  223.         add.l    #2*CHARWIDTH,d0
  224.         lea    _slv,a0
  225.         bsr    _ps
  226.         lea    _equ,a0
  227.         bsr    _ps
  228.         move.l    a2,a0
  229.         move.l    a0,d2
  230.         bsr    _pi1
  231.  
  232.         move.l    #7*CHARWIDTH,d0
  233.         add.w    #7+CHARHEIGHT+1,d1
  234.         lea    _leg2,a0
  235.         bsr    _ps
  236.         move.l    #9*CHARWIDTH,d0
  237.         addq.l    #CHARHEIGHT+1,d1
  238.         lea    _leg3,a0
  239.         bsr    _ps
  240.         move.l    #10*CHARWIDTH,d0
  241.         addq.l    #CHARHEIGHT+1,d1
  242.         lea    _leg4,a0
  243.         bsr    _ps
  244.  
  245.         moveq    #13*CHARWIDTH,d0
  246.         sub.l    #3*(CHARHEIGHT+1),d1
  247.         catcpu    nc,_nc
  248.         catcpu    ic,_ic
  249.         catcpu    bc,_bc
  250.         catcpu    wt,_wt
  251.         catcpu    cb,_cb
  252.         catcpu    sb,_sb
  253.  
  254.     ;switch to usermode
  255.         move.l    _custom1,d0
  256.         beq    .nc1
  257.         lea    (-$200,a7),a0
  258.         move    a0,usp
  259.         move    #0,sr
  260. .nc1
  261.     ;call routines
  262. .again        moveq    #39,d1
  263.         jsr    MEMRCHIP
  264.         move.l    (_expmem),a0
  265.         jsr    (16,a0)
  266.         btst    #6,$bfe001
  267.         bne    .again
  268.  
  269.     ;save picture
  270.         lea    (MEMSCREEN),a0
  271.         lea    (_iff),a1
  272.         lea    (_iff_),a2
  273. .cpy        move.w    -(a2),-(a0)
  274.         cmp.l    a1,a2
  275.         bne    .cpy
  276.         move.l    a0,a1
  277.         lea    (_pic),a0
  278.         move.l    #(_iff_-_iff)+SCREENWIDTH*SCREENHEIGHT/8,d0
  279.         jsr    (resload_SaveFile,a5)
  280.     ;end
  281.         pea    TDREASON_OK
  282.         jmp    (resload_Abort,a5)
  283.  
  284. CALC_S    MACRO
  285.         moveq    #0,d2
  286.         lea    \2,a0            ;test address
  287.         pea    \1
  288.         move.l    (a7)+,$68
  289.         move    sr,d5            ;D5 = saved SR
  290.         move.l    a7,d6            ;D6 = saved SP
  291.         bset    #CIACRAB_START,(ciacra,a4)
  292.     QUAD
  293.     ENDM
  294.  
  295. CALC_E    MACRO
  296. .quit0\@    btst    #CIAICRB_TA,(ciaicr,a4)
  297.         bne    (.quit\@)
  298.         move.w    #INTF_PORTS,(intreq,a6)
  299.         rte
  300. .quit\@        move.w    #INTF_PORTS,(intreq,a6)
  301.         btst    #13,d5            ;supervisor
  302.         bne    .s\@
  303.         move.l    (_ssp),a7
  304. .s\@        move    d5,sr
  305.         move.l    d6,a7
  306.         bsr    _pi
  307.         addq    #2,d0
  308.     ENDM
  309.  
  310. CALCRR    MACRO
  311.         setcpu    \3
  312.         CALC_S    .go\@,\1
  313. .loop\@        move.\2    (a0),d7
  314.         move.\2    (a0),d7
  315.         move.\2    (a0),d7
  316.         move.\2    (a0),d7
  317.         move.\2    (a0),d7
  318.         move.\2    (a0),d7
  319.         move.\2    (a0),d7
  320.         move.\2    (a0),d7
  321.         addq.l    #8,d2
  322.         bra    .loop\@
  323. .go\@        CALC_E
  324.     ENDM
  325.  
  326. CALCR    MACRO
  327.         btst    #6,$bfe001
  328.         beq    .q\@
  329.         moveq    #0,d0
  330.         addq.w    #6,d1
  331.         lea    \1,a0
  332.         bsr    _ps
  333.         addq    #2,d0
  334.         lea    \3,a0
  335.         bsr    _ps
  336.         addq    #2,d0
  337.         lea    _read,a0
  338.         bsr    _ps
  339.         addq    #2,d0
  340.         CALCRR    \2,\4,nc
  341.         CALCRR    \2,\4,ic
  342.         CALCRR    \2,\4,bc
  343.         CALCRR    \2,\4,wt
  344.         CALCRR    \2,\4,cb
  345.         CALCRR    \2,\4,sb
  346. .q\@
  347.     ENDM
  348.  
  349. CALCWW    MACRO
  350.         setcpu    \3
  351.         CALC_S    .go\@,\1
  352. .loop\@        move.\2    d7,(a0)
  353.         move.\2    d7,(a0)
  354.         move.\2    d7,(a0)
  355.         move.\2    d7,(a0)
  356.         move.\2    d7,(a0)
  357.         move.\2    d7,(a0)
  358.         move.\2    d7,(a0)
  359.         move.\2    d7,(a0)
  360.         addq.l    #8,d2
  361.         bra    .loop\@
  362. .go\@        CALC_E
  363.     ENDM
  364.  
  365. CALCW    MACRO
  366.         btst    #6,$bfe001
  367.         beq    .q\@
  368.         moveq    #0,d0
  369.         addq.w    #6,d1
  370.         lea    \1,a0
  371.         bsr    _ps
  372.         addq    #2,d0
  373.         lea    \3,a0
  374.         bsr    _ps
  375.         addq    #2,d0
  376.         lea    _writ,a0
  377.         bsr    _ps
  378.         addq    #2,d0
  379.         CALCWW    \2,\4,nc
  380.         CALCWW    \2,\4,ic
  381.         CALCWW    \2,\4,bc
  382.         CALCWW    \2,\4,wt
  383.         CALCWW    \2,\4,cb
  384.         CALCWW    \2,\4,sb
  385. .q\@
  386.     ENDM
  387.  
  388. _rchip        CALCR    _cia,$bfe001,_byte,b
  389.         CALCW    _cia,$bfec01,_byte,b
  390.  
  391.         addq    #2,d1
  392.         CALCR    _cust,vposr(a6),_byte,b
  393.         CALCR    _cust,vposr(a6),_word,w
  394.         CALCR    _cust,vposr(a6),_long,l
  395.         CALCW    _cust,$184(a6),_word,w
  396.         CALCW    _cust,$184(a6),_long,l
  397.  
  398.         addq    #2,d1
  399.         CALCR    _chip,MEMCHIP,_byte,b
  400.         CALCR    _chip,MEMCHIP,_word,w
  401.         CALCR    _chip,MEMCHIP,_long,l
  402.         CALCW    _chip,MEMCHIP,_byte,b
  403.         CALCW    _chip,MEMCHIP,_word,w
  404.         CALCW    _chip,MEMCHIP,_long,l
  405.  
  406.         addq    #2,d1
  407.         CALCR    _exp,(a3),_byte,b
  408.         CALCR    _exp,(a3),_word,w
  409.         CALCR    _exp,(a3),_long,l
  410.         CALCW    _exp,(a3),_byte,b
  411.         CALCW    _exp,(a3),_word,w
  412.         CALCW    _exp,(a3),_long,l
  413.  
  414.         addq    #2,d1
  415.         CALCR    _slv,(a2),_byte,b
  416.         CALCR    _slv,(a2),_word,w
  417.         CALCR    _slv,(a2),_long,l
  418.         CALCW    _slv,(a2),_byte,b
  419.         CALCW    _slv,(a2),_word,w
  420.         CALCW    _slv,(a2),_long,l
  421.  
  422.         rts
  423.  
  424. _rfast        addq    #2,d1
  425.         CALCR    _cia,$bfe001,_byte,b
  426.         CALCW    _cia,$bfec01,_byte,b
  427.  
  428.         addq    #2,d1
  429.         CALCR    _cust,vposr(a6),_word,w
  430.         CALCW    _cust,$184(a6),_word,w
  431.  
  432.         addq    #2,d1
  433.         CALCR    _chip,MEMCHIP,_word,w
  434.         CALCW    _chip,MEMCHIP,_word,w
  435.  
  436.         addq    #2,d1
  437.         CALCR    _exp,(a3),_word,w
  438.         CALCW    _exp,(a3),_word,w
  439.  
  440.         addq    #2,d1
  441.         CALCR    _slv,(a2),_word,w
  442.         CALCW    _slv,(a2),_word,w
  443.  
  444.         rts
  445.  
  446.     CNOP 0,4
  447. _ssp        dc.l    0
  448. _tags        dc.l    WHDLTAG_ECLOCKFREQ_GET
  449. _freq        dc.l    0
  450.         dc.l    WHDLTAG_ATTNFLAGS_GET
  451. _attn        dc.l    0
  452.         dc.l    WHDLTAG_VERSION_GET
  453. _ver        dc.l    0
  454.         dc.l    WHDLTAG_REVISION_GET
  455. _rev        dc.l    0
  456.         dc.l    WHDLTAG_BUILD_GET
  457. _build        dc.l    0
  458.         dc.l    WHDLTAG_CUSTOM1_GET
  459. _custom1    dc.l    0
  460.         dc.l    TAG_DONE
  461. _read        dc.b    "read",0
  462. _writ        dc.b    "writ",0
  463. _byte        dc.b    "byte",0
  464. _word        dc.b    "word",0
  465. _long        dc.b    "long",0
  466. _cia        dc.b    "cia ",0
  467. _cust        dc.b    "cust",0
  468. _exp        dc.b    "exp ",0
  469. _slv        dc.b    "slv ",0
  470. _chip        dc.b    "chip",0
  471.     EVEN
  472.  
  473. ;--------------------------------
  474. ; IN:    d0 = word x
  475. ;    d1 = word y
  476. ;    a0 = cptr string
  477. ; OUT:    d0 = word new x
  478.  
  479. _ps        movem.l    d2,-(a7)
  480.         moveq    #0,d2
  481.         bra    .in
  482. .next        bsr    _pc
  483.         add.w    #CHARWIDTH,d0
  484. .in        move.b    (a0)+,d2
  485.         bne    .next
  486.         movem.l    (a7)+,d2
  487.         rts
  488.  
  489. ; IN:    d0 = word x
  490. ;    d1 = word y
  491. ;    d2 = long value
  492. ;    d6 = leading spaces?
  493. ; OUT:    d0 = word new x
  494.  
  495. _pi        move.l    d6,-(a7)
  496.         st    d6
  497.         bsr    _pi2
  498.         move.l    (a7)+,d6
  499.         rts
  500.  
  501. _pi1        move.l    d6,-(a7)
  502.         sf    d6
  503.         bsr    _pi2
  504.         move.l    (a7)+,d6
  505.         rts
  506.  
  507. _pi2        movem.l    d2-d5,-(a7)
  508.         moveq    #7,d4
  509.         sf    d5
  510.         move.l    d2,d3
  511. .n        rol.l    #4,d3
  512.         move.b    d3,d2
  513.         and.w    #$f,d2
  514.         beq    .0
  515.         st    d5
  516.         cmp.w    #$a,d2
  517.         bhs    .a
  518.         add.w    #"0",d2
  519.         bra    .g
  520.  
  521. .0        moveq    #"0",d2
  522.         tst.b    d5
  523.         bne    .g
  524.         tst.b    d4        ;last?
  525.         beq    .g
  526.         tst.b    d6
  527.         beq    .l
  528.         moveq    #" ",d2
  529.         bra    .g
  530.  
  531. .a        add.w    #"a"-10,d2
  532.  
  533. .g        bsr    _pc
  534.         add.w    #CHARWIDTH,d0
  535. .l        dbf    d4,.n
  536.         movem.l    (a7)+,d2-d5
  537.         rts
  538.  
  539. ; IN:    d0 = word x
  540. ;    d1 = word y
  541. ;    d2 = byte digit (0..15)
  542.  
  543. _pc        movem.l    d0-d3/a0-a1,-(a7)
  544.         lea    (MEMSCREEN),a0
  545.         mulu    #SCREENWIDTH/8,d1
  546.         add.l    d1,a0
  547.         sub.w    #32,d2
  548.         mulu    #CHARWIDTH,d2
  549.         lea    (_font),a1
  550.         moveq    #CHARHEIGHT-1,d3
  551. .cp        bfextu    (a1){d2:CHARWIDTH},d1
  552.         bfins    d1,(a0){d0:CHARWIDTH}
  553.         add.l    #(_font_-_font)*8/CHARHEIGHT,d2
  554.         add.l    #SCREENWIDTH,d0
  555.         dbf    d3,.cp
  556.         movem.l    (a7)+,d0-d3/a0-a1
  557.         rts
  558.  
  559. _font        INCBIN    sources:pics/pic_font_5x6_br.bin
  560. _font_
  561. _stuffend
  562.  
  563. _copper        dc.w    diwstrt,$1a81
  564.         dc.w    diwstop,$1ac1+((SCREENHEIGHT-256)*$100)
  565.         dc.w    bplcon0,$1200
  566.         dc.w    bplpt+0,MEMSCREEN>>16
  567.         dc.w    bplpt+2,MEMSCREEN&$ffff
  568.         dc.w    bpl1mod,0
  569.         dc.w    color+0,0
  570.         dc.w    color+2,$ddd
  571.         dc.l    -2
  572.  
  573. _var        dc.l    0
  574.  
  575. _iff        dc.l    "FORM",4+8+$14+8+6+8+SCREENWIDTH*SCREENHEIGHT/8,"ILBM"
  576.         dc.l    "BMHD",$14
  577.         dc.w    SCREENWIDTH,SCREENHEIGHT,0,0
  578.         dc.b    1,0,0,0
  579.         dc.w    0
  580.         dc.b    10,11
  581.         dc.w    SCREENWIDTH,SCREENHEIGHT
  582.         dc.l    "CMAP",6
  583.         dc.b    0,0,0,255,255,255
  584.         dc.l    "BODY",SCREENWIDTH*SCREENHEIGHT/8
  585. _iff_
  586. _pic        dc.b    "benchmark.ilbm",0
  587. _nc        dc.b    "      nc",0
  588. _ic        dc.b    "      ic",0
  589. _bc        dc.b    "   ss+bc",0
  590. _wt        dc.b    "   dc-wt",0
  591. _cb        dc.b    "   dc-cb",0
  592. _sb        dc.b    "  sb/nwa",0
  593. _leg2        dc.b    "setcpu",0
  594. _leg3        dc.b    "cacr",0
  595. _leg4        dc.b    "pcr",0
  596. _top        dc.b    ">>speed<< - amount of memory accesses per 1/11 second",0
  597. _top2        dc.b    "AttnFlags=",0
  598. _top3        dc.b    "  Eclock=",0
  599. _top5        dc.b    "  whdload"
  600. _equ        dc.b    "=",0
  601. _dot        dc.b    ".",0
  602. _quit        dc.b    "hold lmb to quit and save pic  v1.8  wepl "
  603.     INCBIN    t:date
  604.         dc.b    0
  605.     EVEN
  606.  
  607. ;======================================================================
  608.  
  609.     END
  610.